package bo.zhao.action.strategy.logic_decoupled;

/**
 * @author Bo.Zhao
 * @since 19/5/26
 */
public class Calculator {
	
	
	
	/**
	 * 无设计：使用逻辑分支，分支繁多，代码复杂
	 * */
	public Integer calc1(int a,int b, String operator) {
		if("-".equals(operator)) {
			return minus(a, b);
		} else if("+".equals(operator)) {
			return plus(a, b);
		} else {
			return null;
		}
	}
	
	
	
	/**
	 * 使用函数：
	 * 1、简化分支代码，分支多时还是会有问题；
	 * 2、函数独立开来，可在函数内增加复杂度，而不影响主调逻辑。
	 * */
	public Integer calc2(int a,int b, String operator) {
		if("-".equals(operator)) {
			return minus(a, b);
		} else if("+".equals(operator)) {
			return plus(a, b);
		} else {
			return null;
		}
	}
 
	private Integer plus(int a, int b) {
		return a+b;
	}

	private Integer minus(int a, int b) {
		return a-b;
	}
     
	
	
	/**
	 * 使用函数：
	 * 1、简化分支代码，分支多时还是会有问题；
	 * 2、函数独立开来，可在类内增加复杂度，而不影响主调逻辑，且类的拓展性比方法更好
	 * */
	public Integer calc3(int a,int b, String operator) {
		if("-".equals(operator)) {
			return new Minus().calc(a, b);
		} else if("+".equals(operator)) {
			return new Plus().calc(a, b);
		} else {
			return null;
		}
	}
}


class Minus {
	public Integer calc(int a,int b) {
		return a-b;
	}
}

class Plus {
	public Integer calc(int a,int b) {
		return a+b;
	}
}
